import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用 SimHei 字体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 定义微分方程组
def Initial_biological_model(y, t, params):
    C, W, I = y  # 设置初始种群数量
    r_C, a_CI, d_C, r_W, g_C, d_W, h, e_IC, a_IC, p = params

    # r_C:农作物的自然增长率            # a_CI:昆虫对农作物的攻击率
    # d_C:农作物自然死亡率              # r_W:杂草的自然增长率
    # g_C:杂草对农作物的竞争率           # d_W:杂草自然死亡率
    # h:除草剂的效果系数                # e_IC:昆虫从农作物获得能量的效率
    # a_IC:昆虫捕食农作物的效率         # p:杀虫剂的效果系数

    dCdt = r_C * C - a_CI * I * C - d_C * C - g_C * W * C  # 农作物增长
    dWdt = r_W * W - h * W - d_W * W - g_C * C * W  # 杂草增长
    dIdt = e_IC * a_IC * C * I - d_C * I - p * I  # 昆虫增长
    return [dCdt, dWdt, dIdt]

# 初始种群数量
C0 = 10000  # 农作物
W0 = 8000  # 杂草
I0 = 3000  # 昆虫
y0 = [C0, W0, I0]
# 时间点
t = np.linspace(0, 5, 1000)

# # 调整后的参数
params = (0.12, 0.00001, 0.1, 0.05, 0.00001, 0.01, 0.6, 0.01, 0.0001, 0.7)

# 求解微分方程组
solution = odeint(Initial_biological_model, y0, t, args=(params,))

# 绘制结果
plt.figure(figsize=(10, 8))
plt.plot(t, solution[:, 0], label='农作物数量 (C)')
plt.plot(t, solution[:, 1], label='杂草数量 (W)')
plt.plot(t, solution[:, 2], label='昆虫数量 (I)')

plt.legend()

plt.xlabel('时间')
plt.ylabel('种群数量')
plt.title('生态系统种群数量随时间变化')
plt.show()